﻿using Library.AppWeb;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using MPR.Poker.Model.SYS;

namespace MPR.Poker.DALEntity.SYS
{
    /// <summary>
    /// Trần Hòa Nghĩa
    /// 01/12/2013
    /// Danh sách sự kiện
    /// </summary>
    public class DAL_Event
    {
        public DAL_Event()
        {
        }

        #region Insert/Update/Delete

        public static void Insert(SYS_Event objEvent)
        {
            try
            {
                using (PokerLife db = new PokerLife())
                {
                    SYS_Event ev = new SYS_Event();                    
                    ev.UserIDSys = objEvent.UserIDSys;
                    ev.CreatedDate = DateTime.Now;
                    ev.Type = objEvent.Type;
                    ev.Description = objEvent.Description;
                    ev.OrderIndex = db.SYS_Events.Count() + 1;

                    db.SYS_Events.Add(ev);
                    db.SaveChanges();
                }
            }
            catch
            {

            }
        }

        public static void Insert(string strEventName,int intUID,string strType)
        {
            try
            {
                using (PokerLife db = new PokerLife())
                {
                    SYS_Event ev = new SYS_Event();                   
                    ev.UserIDSys = intUID;
                    ev.CreatedDate = DateTime.Now;
                    ev.Type = strType;
                    ev.Description = strEventName;
                    ev.OrderIndex = db.SYS_Events.Count() + 1;
                    db.SYS_Events.Add(ev);
                    db.SaveChanges();
                }
            }
            catch
            {

            }
        }

        #endregion

        #region Load/Search/Select

        /// <summary>
        /// Lấy thông tin sự kiện
        /// </summary>
        /// <param name="objEvent"></param>
        /// <param name="strID"></param>
        /// <returns></returns>
        public ResultMessage LoadInfo(ref SYS_Event objEvent, int intIDSys)
        {
            ResultMessage objResultMessage = new ResultMessage();
            try
            {
                using (PokerLife db = new PokerLife())
                {
                    var Event = from ev in db.SYS_Events
                                where ev.IDSys == intIDSys
                                select new
                                {
                                    ev.IDSys,
                                    ev.UserIDSys,
                                    ev.CreatedDate,
                                    ev.Type,
                                    ev.Description,
                                    ev.OrderIndex
                                };

                    objEvent = new SYS_Event();
                    foreach (var obj in Event)
                    {
                        if (!Convert.IsDBNull(obj.IDSys)) objEvent.IDSys = obj.IDSys;
                        if (!Convert.IsDBNull(obj.UserIDSys)) objEvent.UserIDSys = obj.UserIDSys;
                        if (!Convert.IsDBNull(obj.CreatedDate)) objEvent.CreatedDate = obj.CreatedDate;
                        if (!string.IsNullOrEmpty(obj.Type)) objEvent.Type = obj.Type;
                        if (!string.IsNullOrEmpty(obj.Description)) objEvent.Description = obj.Description;
                        if (!Convert.IsDBNull(obj.OrderIndex)) objEvent.OrderIndex = obj.OrderIndex;                        

                    }
                }
            }
            catch (Exception objEx)
            {
                objResultMessage = new ResultMessage(true, ResultMessage.ErrorTypes.LoadInfo, "Lấy thông tin sự kiện", objEx);
                DAL_Error.Insert(objResultMessage, 0, "DAL_Event --> LoadInfo");
                return objResultMessage;
            }
            return new ResultMessage(false, ResultMessage.ErrorTypes.No_Error, "Lấy thông tin sự kiện thành công", string.Empty);
        }

        /// <summary>
        /// Lấy danh sách sự kiện
        /// </summary>
        /// <param name="dtEvent"></param>
        /// <returns></returns>
        public ResultMessage SearchData(ref DataTable dtEvent)
        {
            ResultMessage objResultMessage = new ResultMessage();
            dtEvent = new DataTable();

            try
            {
                List<SYS_Event> lst = new List<SYS_Event>();
                objResultMessage = SelectToList(ref lst);
                if (objResultMessage.IsError) return objResultMessage;

                dtEvent = ConvertData.ConvertToDataTable<SYS_Event>(lst);
            }
            catch (Exception objEx)
            {
                objResultMessage = new ResultMessage(true, ResultMessage.ErrorTypes.SearchData, "Lấy thông tin sự kiện", objEx);
                DAL_Error.Insert(objResultMessage, 0, "DAL_Event --> SearchData");
                return objResultMessage;
            }

            return new ResultMessage(false, ResultMessage.ErrorTypes.No_Error, "Lấy danh sách sự kiện thành công", string.Empty);
        }

        /// <summary>
        /// Lấy danh sách sự kiện
        /// </summary>
        /// <param name="dtEvent"></param>
        /// <param name="objpara">tham số : từ ngày , đến ngày , diễn giải </param>
        /// <returns></returns>
        public ResultMessage SearchData(ref DataTable dtEvent, object[] objpara)
        {
            ResultMessage objResultMessage = new ResultMessage();
            dtEvent = new DataTable();
            DateTime dtBegin = (DateTime)objpara[0];
            DateTime dtEnd = (DateTime)objpara[1];
            string strDes = objpara[2].ToString();

            try
            {
                List<SYS_Event> lst = new List<SYS_Event>();
                objResultMessage = SelectToList(ref lst,objpara);
                if (objResultMessage.IsError) return objResultMessage;

                dtEvent = ConvertData.ConvertToDataTable<SYS_Event>(lst);
            }
            catch (Exception objEx)
            {
                objResultMessage = new ResultMessage(true, ResultMessage.ErrorTypes.SearchData, "Lấy thông tin sự kiện", objEx);
                DAL_Error.Insert(objResultMessage, 0, "DAL_Event --> SearchData");
                return objResultMessage;
            }

            return new ResultMessage(false, ResultMessage.ErrorTypes.No_Error, "Lấy danh sách sự kiện thành công", string.Empty);
        }

        /// <summary>
        /// Lấy danh sách sự kiện dạng List
        /// </summary>
        /// <param name="lstEvent"></param>
        /// <returns></returns>
        public ResultMessage SelectToList(ref List<SYS_Event> lstEvent)
        {
            ResultMessage objResultMessage = new ResultMessage();
            try
            {
                using (PokerLife db = new PokerLife())
                {
                    var Event = (from e in db.SYS_Events
                                 orderby e.OrderIndex
                                 select new
                                 {
                                     e.IDSys,
                                     e.UserIDSys,
                                     e.CreatedDate,
                                     e.Type,
                                     e.Description,
                                     e.OrderIndex
                                 }).ToList().Select(d => new SYS_Event()
                                {
                                    IDSys=d.IDSys,
                                    UserIDSys=d.UserIDSys,
                                    CreatedDate=d.CreatedDate,
                                    Type=d.Type,
                                    Description=d.Description,
                                    OrderIndex=d.OrderIndex
                                });


                    lstEvent = Event.ToList();
                }
            }
            catch (Exception objEx)
            {
                objResultMessage = new ResultMessage(true, ResultMessage.ErrorTypes.SelectData, "Lấy danh sách sự kiện", objEx);
                DAL_Error.Insert(objResultMessage, 0, "DAL_Event --> SelectToList");
                return objResultMessage;
            }

            return new ResultMessage(false, ResultMessage.ErrorTypes.No_Error, "Lấy danh sách sự kiện thành công", string.Empty);
        }

        /// <summary>
        /// Lấy danh sách sự kiện dạng List
        /// </summary>
        /// <param name="lstEvent"></param>
        /// <param name="objpara">Loại tìm (Tất cả,tên người dùng,diễn giải), từ ngày , đến ngày , loại</param>
        /// <returns></returns>
        public ResultMessage SelectToList(ref List<SYS_Event> lstEvent,object[] objpara)
        {
            ResultMessage objResultMessage = new ResultMessage();
            int intType = Convert.ToInt32(objpara[0]);//Loại tìm kiếm
            string strContent = objpara[1].ToString().Trim();
            DateTime dtBegin = (DateTime)objpara[2];
            DateTime dtEnd = (DateTime)objpara[3];
            string strType = objpara[4].ToString();

            try
            {
                using (PokerLife db = new PokerLife())
                {
                    var Event = (from e in db.SYS_Events
                                 where ((intType==0 & (string.IsNullOrEmpty(strContent) | e.Description.Contains(strContent)))
                                 | (intType == 1 & (string.IsNullOrEmpty(strContent)))
                                 | (intType == 2 & (string.IsNullOrEmpty(strContent) | e.Description.Contains(strContent))))
                                 & e.CreatedDate >= dtBegin & e.CreatedDate <= dtEnd
                                 & (string.IsNullOrEmpty(strType) | e.Type.Contains(strType))
                                 
                                 orderby e.OrderIndex
                                 select new
                                 {
                                     e.IDSys,
                                     e.UserIDSys,
                                     e.CreatedDate,
                                     e.Type,
                                     e.Description,
                                     e.OrderIndex
                                 }).ToList().Select(d => new SYS_Event()
                                 {
                                     IDSys = d.IDSys,
                                     UserIDSys = d.UserIDSys,
                                     CreatedDate = d.CreatedDate,
                                     Type = d.Type,
                                     Description = d.Description,
                                     OrderIndex = d.OrderIndex
                                 });

                    lstEvent = Event.ToList();
                }
            }
            catch (Exception objEx)
            {
                objResultMessage = new ResultMessage(true, ResultMessage.ErrorTypes.SelectData, "Lấy danh sách sự kiện", objEx);
                DAL_Error.Insert(objResultMessage, 0, "DAL_Event --> SelectToList");
                return objResultMessage;
            }

            return new ResultMessage(false, ResultMessage.ErrorTypes.No_Error, "Lấy danh sách sự kiện thành công", string.Empty);
        }

        /// <summary>
        /// Lấy danh sách sự kiện dạng List
        /// </summary>
        /// <param name="lstEvent">Đối tượng sự kiện</param>
        /// <param name="intPageSize">Số lượng Record một trang</param>
        /// <param name="intPageNumber">Lấy trang số mấy</param>
        /// <returns></returns>
        public ResultMessage SelectToList(ref List<SYS_Event> lstEvent, int intPageSize, int intPageNumber)
        {
            ResultMessage objResultMessage = new ResultMessage();
            try
            {
                using (PokerLife db = new PokerLife())
                {
                    var Event = from gu in db.SYS_Events                                    
                                    orderby gu.OrderIndex
                                    select gu;

                    lstEvent = Event.Skip((intPageNumber - 1) * intPageSize).Take(intPageSize).ToList();
                }
            }
            catch (Exception objEx)
            {
                objResultMessage = new ResultMessage(true, ResultMessage.ErrorTypes.SelectData, "Lấy danh sách sự kiện", objEx);
                DAL_Error.Insert(objResultMessage, 0, "DAL_Event --> SelectToList");
                return objResultMessage;
            }

            return new ResultMessage(false, ResultMessage.ErrorTypes.No_Error, "Lấy danh sách sự kiện thành công", string.Empty);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="lstEvent">Đối tượng sự kiện</param>
        /// <param name="intPageSize">Số lượng Record một trang</param>
        /// <param name="intPageNumber">Lấy trang số mấy</param>
        /// <param name="objpara">Loại tìm (Tất cả,tên người dùng,diễn giải), từ ngày , đến ngày , loại</param>
        /// <returns></returns>
        public ResultMessage SelectToList(ref List<SYS_Event> lstEvent, int intPageSize, int intPageNumber, object[] objpara)
        {
            ResultMessage objResultMessage = new ResultMessage();
            int intType = Convert.ToInt32(objpara[0]);//Loại tìm kiếm
            string strContent = objpara[1].ToString().Trim();
            DateTime dtBegin = (DateTime)objpara[2];
            DateTime dtEnd = (DateTime)objpara[3];
            string strType = objpara[4].ToString();

            try
            {
                using (PokerLife db = new PokerLife())
                {
                    var Event = (from e in db.SYS_Events
                                 where ((intType == 0 & (string.IsNullOrEmpty(strContent)| e.Description.Contains(strContent)))
                                | (intType == 1 & (string.IsNullOrEmpty(strContent) ))
                                | (intType == 2 & (string.IsNullOrEmpty(strContent) | e.Description.Contains(strContent))))
                                & e.CreatedDate >= dtBegin & e.CreatedDate <= dtEnd
                                & (string.IsNullOrEmpty(strType) | e.Type.Contains(strType))

                                 orderby e.OrderIndex
                                 select new
                                 {
                                     e.IDSys,
                                     e.UserIDSys,
                                     e.CreatedDate,
                                     e.Type,
                                     e.Description,
                                     e.OrderIndex
                                 }).ToList().Select(d => new SYS_Event()
                                 {
                                     IDSys = d.IDSys,
                                     UserIDSys = d.UserIDSys,
                                     CreatedDate = d.CreatedDate,
                                     Type = d.Type,
                                     Description = d.Description,
                                     OrderIndex = d.OrderIndex
                                 });

                    lstEvent = Event.Skip((intPageNumber - 1) * intPageSize).Take(intPageSize).ToList();
                }
            }
            catch (Exception objEx)
            {
                objResultMessage = new ResultMessage(true, ResultMessage.ErrorTypes.SelectData, "Lấy danh sách sự kiện", objEx);
                DAL_Error.Insert(objResultMessage, 0, "DAL_Event --> SelectToList");
                return objResultMessage;
            }

            return new ResultMessage(false, ResultMessage.ErrorTypes.No_Error, "Lấy danh sách sự kiện thành công", string.Empty);
        }

        #endregion
    }
}
